/**
 * describe:
 *
 * @author chaP
 * @date 2019/01/23
 */
package CodingTest.AC20190123;

import java.util.HashSet;

/**
 * 快乐数：
 * 编写一个算法来判断一个数是不是“快乐数”。

 一个“快乐数”定义为：对于一个正整数，每一次将该数替换为它每个位置上的数字的平方和，
 然后重复这个过程直到这个数变为 1，也可能是无限循环但始终变不到 1。如果可以变为 1，那么这个数就是快乐数。

 思路：循环计算，最后等于1，跳出循环，返回true，如果出现重复数，则返回false
 */
public class isHappy {
    public boolean isHappy(int n) {

        if(n == 1)
            return true;
        HashSet<Integer> hs = new HashSet<Integer>();

        while(!hs.contains(n)){
            hs.add(n);
         int sum = 0;
         sum += Math.pow(n%10,2);
         n = n/10;
         while(n>=10){
             sum+=Math.pow(n%10,2);
             n/=10;
         }
         sum += n*n;
         n = sum;
         if(n == 1)
             return true;
        }
        return false;


    }

    public static void main(String[] args) {
        isHappy ih = new isHappy();
        int n= 67;
        boolean result = ih.isHappy(n);
    }
}
